

#include <iostream>

class Test1

{

public:

    Test1(int n)

    {

        num=n;

    }//普通构造函数

    void print() {}
    void func() {

    }

private:

    int num;

};

class Test2

{

public:

    explicit Test2(int n)

    {

        num=n;

    }//explicit(显式)构造函数

    void print() {}
    void func() {

    }

private:

    int num;

};


int main() {

    Test1 t1=12;//隐式调用其构造函数,成功
    t1.print();

    //Test2 t2=12;//编译错误,不能隐式调用其构造函数

    Test2 t2(12);//显式调用成功
    t2.print();

//Test1的构造函数带一个int型的参数，代码23行会隐式转换成调用Test1的这个构造函数。
//而Test2的构造函数被声明为explicit（显式），这表示不能通过隐式转换来调用这个构造函数，因此代码24行会出现编译错误。

//普通构造函数能够被隐式调用。而explicit构造函数只能被显式调用。
    t2.func();

    return 0;
}